package pe.gob.mimp.web.controller;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import pe.gob.mimp.model.*;
import pe.gob.mimp.service.CasoSocialService;
import pe.gob.mimp.service.CombosService;
import pe.gob.mimp.service.MenuUsuarioService;
import pe.gob.mimp.service.SeguimientoService;
import pe.gob.mimp.validator.SeguimientoValidator;

@Controller
@RequestMapping(value = "/derivacionaccion")
public class DerivacionAccionController {
	@Autowired
	private CombosService combos;
	@Autowired
	private CasoSocialService casoSocialService;
	@Autowired
	private SeguimientoService seguimientoService;
	@Autowired
	private MenuUsuarioService menuUsuarioService;

	@RequestMapping(method = RequestMethod.GET)
	public String showCasoForm(
			Model model,
			@RequestParam(value = "idDerivacion", required = true) Long idDerivacion,
			@RequestParam(value = "idSeguimiento", required = false) Long idSeguimiento,
			HttpServletRequest request) {
		Seguimiento seguimiento;
		HttpSession session = request.getSession();
		List<MenuUsuario> menu;

		if (session.getAttribute("login") == null) {
			return "redirect:login";
		}
		menu = menuUsuarioService.getMenuUsuarioPorUserName((String) session.getAttribute("login"));
		if (idSeguimiento != null) {
			seguimiento = seguimientoService.getSeguimientoPorId(idSeguimiento);
		} else {
			seguimiento = new Seguimiento();
			seguimiento.setIdDerivacion(idDerivacion);
		}
		model.addAttribute("seguimiento", seguimiento);
		model.addAttribute("menu", menu);
		model.addAttribute("opciones", menu);
		if(idSeguimiento != null){
			model.addAttribute("edita", true);
		}else{
			model.addAttribute("edita", false);
		}
		return "derivacionaccion";
	}

	@RequestMapping(method = RequestMethod.POST)
	public String grabaFormulario(Model model,Seguimiento seguimiento) {
            if (seguimiento.getFechaRegistro() == null) {
                    seguimiento.setFechaRegistro(new Date());
            }
            seguimientoService.saveSeguimiento(seguimiento);
            return "redirect:derivacionaccion?idDerivacion="
                            + seguimiento.getIdDerivacion();
	}

	@RequestMapping(value = "/seguimiento", method = RequestMethod.GET)
	public @ResponseBody
	List<Seguimiento> getSeguimiento(
			@RequestParam(value = "idDerivacion", required = true) Long idDerivacion,
			HttpServletRequest request) {
		HttpSession session = request.getSession();

		if (session.getAttribute("login") == null) {
			return null;
		}
		return seguimientoService.getSeguimientoPorDerivacion(idDerivacion);
	}

	@RequestMapping(value = "/elimina", method = RequestMethod.GET)
	public String eliminaSeguimiento(
			@RequestParam(value = "idSeguimiento", required = true) Long idSeguimiento,
			@RequestParam(value = "idDerivacion", required = true) Long idDerivacion,
			HttpServletRequest request) {
		HttpSession session = request.getSession();

		if (session.getAttribute("login") == null) {
			return "redirect:login";
		}
		seguimientoService.deleteSeguimiento(seguimientoService
				.getSeguimientoPorId(idSeguimiento));

		return "redirect:/derivacionaccion?idDerivacion=" + idDerivacion;
	}
}
